package map;

import array.Interval;

import java.util.*;

/**
 * Created by fengliejv on 2017/11/30.
 */
public class DataStreamasDisjointIntervals352 {
    TreeMap<Integer, Integer> treeMap = new TreeMap<>();

    public DataStreamasDisjointIntervals352() {
    }

    public void addNum(int val) {
        if (treeMap.containsKey(val)) {
            return;
        }
        Integer lowerKey = treeMap.lowerKey(val) == null ? -2 : treeMap.lowerKey(val);
        Integer higherKey = treeMap.higherKey(val) == null ? -2 : treeMap.higherKey(val);

        Integer temp1 = treeMap.get(lowerKey) == null ? -2 : treeMap.get(lowerKey);
        Integer temp2 = treeMap.get(higherKey) == null ? -2 : treeMap.get(higherKey);
        if (temp1 >= val) {
            return;
        }
        if (temp1 + 1 == val && val + 1 == higherKey) {
            treeMap.remove(higherKey);
            treeMap.put(lowerKey, temp2);
        } else if (temp1 + 1 == val) {
            treeMap.put(lowerKey, val);
        } else if (val + 1 == higherKey) {
            treeMap.remove(higherKey);
            treeMap.put(val, temp2);
        } else {
            treeMap.put(val, val);
        }
    }

    public int[][] getIntervals() {
        int[][] result = new int[treeMap.size()][2];
        int i = 0;
        for (Map.Entry<Integer, Integer> entry : treeMap.entrySet()
        ) {
            result[i][0] = entry.getKey();
            result[i][1] = entry.getValue();
            i++;
        }
        return result;
    }


//    ArrayList<Integer> list = new ArrayList<>();
//
//    public void addNum(int val) {
//        list.add(val);
//    }
//
//    public List<Interval> getIntervals() {
//        Collections.sort(list);
//        List<Interval> strings = new ArrayList<>();
//        if (list.size() == 0) {
//            return strings;
//        }
//        int pre = list.get(0);
//        Interval interval = new Interval();
//        interval.start = pre;
//        for (int i = 1; i < list.size(); i++) {
//            if (list.get(i) != pre&&list.get(i) !=pre + 1) {
//
//                interval.end = pre;
//                strings.add(new Interval(interval.start, interval.end));
//                interval.start=list.get(i);
//
//            }
//            pre = list.get(i);
//        }
//        interval.end=pre;
//        strings.add(new Interval(interval.start,interval.end));
//        return strings;
//
//    }
}
